﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace DADOS.unidade
{
    public class metUnidade
    {

        DB_PROAD banco = new DB_PROAD();

        private void FecharConexao(object banco)
        {
            ((DB_PROAD)banco).Connection.Close();
        }

        private void InicializarConexao(object banco)
        {
            ((DB_PROAD)banco).Connection.Open();
        }

        public void Incluir(TB_US objUs)
        {
            try
            {
                InicializarConexao(banco);
                banco.AddToTB_US(objUs);
                banco.SaveChanges();
            }
            catch (Exception)
            {
                    
                throw;
            }
            finally
            {
                FecharConexao(banco);
            }
        }

        public void Excluir(int intCodUs, int intCodProfissional)
        {
            try
            {
                InicializarConexao(banco);
                var objUSBanco = banco.TB_US.Where(q => q.CO_US == intCodUs).FirstOrDefault();
                objUSBanco.NR_STATUS = 3;
                objUSBanco.CO_PROFISSICIONAL = intCodProfissional;
                objUSBanco.DT_ATUALIZACAO = DateTime.Now;
                banco.SaveChanges();
            }
            catch (Exception)
            {

                throw;
            }
            finally
            {
                FecharConexao(banco);
            }
        }

        public void Alterar(TB_US objUs)
        {
            try
            {
                InicializarConexao(banco);
                var objUSBanco = banco.TB_US.Where(q => q.CO_US == objUs.CO_US).FirstOrDefault();

                objUSBanco.NO_US = objUs.NO_US;
                objUSBanco.NO_REGIAO = objUs.NO_REGIAO;
                objUSBanco.CO_UF = objUs.CO_UF;
                objUSBanco.CO_MUNICIPIO = objUs.CO_MUNICIPIO;
                objUSBanco.DS_CEP = objUs.DS_CEP;
                objUSBanco.DS_ENDERECO = objUs.DS_ENDERECO;
                objUSBanco.NR_STATUS = objUs.NR_STATUS;
                objUSBanco.CO_PROFISSICIONAL = objUs.CO_PROFISSICIONAL;
                objUSBanco.DT_ATUALIZACAO = DateTime.Now;

                banco.SaveChanges();
            }
            catch (Exception)
            {

                throw;
            }
            finally
            {
                FecharConexao(banco);
            }
        }

        public List<TB_US> Lista(string strNome, int intCodUF, int intCodMunicipio)
        {

            var listUS = new List<TB_US>();
            
            try
            {
                InicializarConexao(banco);
                listUS = banco.TB_US.Where(q => q.NR_STATUS != 3).OrderBy(q => q.NO_US).ToList();

                if (strNome.Length > 0)
                {
                    listUS = listUS.Where(q => q.NO_US.Contains(strNome)).ToList();
                }

                if (intCodUF > 0)
                {
                    listUS = listUS.Where(q => q.CO_UF == intCodUF).ToList();
                }
                if (intCodMunicipio > 0)
                {
                    listUS = listUS.Where(q => q.CO_MUNICIPIO == intCodMunicipio).ToList();
                }

            }
            catch (Exception)
            {

                throw;
            }
            finally
            {
                FecharConexao(banco);
            }

            return listUS;
        }


        public TB_US Selecionar(int intCodUs)
        {
            
            var objUSBanco = new TB_US();
            
            try
            {
                InicializarConexao(banco);
                objUSBanco = banco.TB_US.Where(q => q.CO_US == intCodUs).FirstOrDefault();
            }
            catch (Exception)
            {

                throw;
            }
            finally
            {
                FecharConexao(banco);
            }
            return objUSBanco;
        }

        /// <summary>
        /// Trocar status (Ativar ou Desativar uma unidade)
        /// </summary>
        /// <param name="intCodUs">int Código da unidade</param>
        public void TrocarStatus(int intCodUs)
        {
            try
            {
                InicializarConexao(banco);
                var objUs = banco.TB_US.Where(q => q.CO_US == intCodUs).FirstOrDefault();
                if (objUs != null)
                {
                    if (objUs.NR_STATUS == 0)
                    {
                        objUs.NR_STATUS = 1;
                    }
                    else
                    {
                        objUs.NR_STATUS = 0;
                    }
                }
                banco.SaveChanges();
            }
            catch (Exception)
            {

                throw;
            }
            finally
            {
                FecharConexao(banco);
            }
        }

    }
}
